package com.qf.md.type.service.impl;

import com.qf.entity.md.type.MdItemType;
import com.qf.exception.CustomerException;
import com.qf.md.type.dao.MdItemTypeDAO;
import com.qf.md.type.param.TypeParam;
import com.qf.md.type.service.MdItemService;
import com.qf.md.type.vo.MdTypeVO;
import com.qf.utils.RedisUtil;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Service("mit")
public class MdItemServiceImpl implements MdItemService {
    @Resource
    private MdItemTypeDAO mdItemTypeDAO;
    @Resource
    private RedisUtil redisUtil;
    @Override
    public List<MdTypeVO> findTypeVO() {
        //先从redis缓存中看是否有这个数据，如果没有再去数据库查
        List<MdTypeVO> list = redisUtil.getCacheObject("md:type");
        if (list == null || list.size() == 0) {
            System.out.println("===========");
            //如果没有数据 就执行mysql中的sql语句
             list = mdItemTypeDAO.selectTypeVO();
             //将数据保存到redis中
             redisUtil.setCacheObject("md:type",list);
        }
        return list;
    }

    @Override
    public void deleteById(Long id) {
        //正常逻辑直接删除，但是需要考虑删除的id是否是父级id，如果是父级id，则需要删除子级id，否则删除失败
        //通过删除的当前的id  作为一个字段parent_type_id 查询子级id，如果有子级id，则删除子级id，如果没有子级id，则删除当前id
        List<MdItemType> mdItemTypes = mdItemTypeDAO.selectByParentTypeId(id);
        if (mdItemTypes != null && mdItemTypes.size() > 0) {
            throw new CustomerException("5003","删除失败该分类有子类，请先删除子类");
        }
        mdItemTypeDAO.deleteById(id);
        redisUtil.deleteObject("md:type");
    }

    @Override
    public MdItemType typeInfo(Long id) {
        return mdItemTypeDAO.selectById(id);
    }

    @Override
    public void save(TypeParam typeParam) {
        System.out.println(typeParam.getAncestors());//
        //前端传过来的对象  现在只需要处理一个字段  ancestors
        //开始设置 ancestors字段
        //查询父级信息  的 ancestors字段的值 拼接自己的父类的id给 自己ancestors
        MdItemType mdItemType = mdItemTypeDAO.selectById(typeParam.getParentTypeId());
        String ancestors = mdItemType.getAncestors();
        typeParam.setAncestors(ancestors + "," + typeParam.getParentTypeId());
        System.out.println(typeParam);//ancestor属性就有值了
        mdItemTypeDAO.insertType(typeParam);
        //只要动了数据库，然后立马把缓存删除掉哦
        redisUtil.deleteObject("md:type");

    }


}
